数据库访问 (ADO.NET, Entity Framework)

概述

在现代软件开发中,数据库访问是一个至关重要的部分。无论是存储用户信息、产品数据还是日志记录,应用程序都需要与数据库进行交互。C# 提供了多种方式来实现数据库访问,其中最常用的是 ADO.NET 和 Entity Framework。本教程将详细介绍这两种技术,并通过代码示例和实践练习帮助你掌握它们。

ADO.NET 简介

什么是 ADO.NET?

ADO.NET(ActiveX Data Objects .NET)是 .NET 框架中用于数据访问的核心组件。它提供了一组类和接口,用于连接数据库、执行 SQL 命令、处理结果集等操作。ADO.NET 是基于连接的,这意味着它在执行数据库操作时需要保持与数据库的连接。

ADO.NET 的核心组件

  1. Connection:用于建立与数据库的连接。
  2. Command:用于执行 SQL 命令(如 SELECT、INSERT、UPDATE、DELETE)。
  3. DataReader:用于从数据库中读取数据,通常用于只读操作。
  4. DataAdapter:用于填充 DataSet 或 DataTable,并处理数据的更新。
  5. DataSet 和 DataTable:用于在内存中存储和操作数据。

示例:使用 ADO.NET 连接和查询数据库

using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
        string query = "SELECT * FROM Customers";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(query, connection);
            connection.Open();

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Console.WriteLine($"{reader["CustomerID"]} - {reader["CompanyName"]}");
            }

            reader.Close();
        }
    }
}

实践练习

  1. 创建一个控制台应用程序,使用 ADO.NET 连接到本地 SQL Server 数据库。
  2. 编写代码,查询数据库中的某个表,并将结果输出到控制台。
  3. 尝试插入、更新和删除操作,并验证结果。

Entity Framework 简介

什么是 Entity Framework?

Entity Framework(EF)是 .NET 中的一个对象关系映射(ORM)框架。它允许开发者使用 .NET 对象来操作数据库,而不需要编写大量的 SQL 代码。EF 支持多种数据库,包括 SQL Server、MySQL、PostgreSQL 等。

Entity Framework 的核心概念

  1. DbContext:表示与数据库的会话,用于查询和保存数据。
  2. DbSet:表示数据库中的一个表,用于执行 CRUD 操作。
  3. LINQ to Entities:用于查询数据库的 LINQ 扩展。

示例:使用 Entity Framework 查询数据库

using System;
using Microsoft.EntityFrameworkCore;
using System.Linq;

public class MyDbContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;");
    }
}

public class Customer
{
    public int CustomerID { get; set; }
    public string CompanyName { get; set; }
}

class Program
{
    static void Main()
    {
        using (var context = new MyDbContext())
        {
            var customers = context.Customers.ToList();

            foreach (var customer in customers)
            {
                Console.WriteLine($"{customer.CustomerID} - {customer.CompanyName}");
            }
        }
    }
}

实践练习

  1. 创建一个控制台应用程序,使用 Entity Framework 连接到本地 SQL Server 数据库。
  2. 定义一个实体类,映射到数据库中的某个表。
  3. 编写代码,使用 LINQ 查询数据库,并将结果输出到控制台。
  4. 尝试插入、更新和删除操作,并验证结果。

ADO.NET 与 Entity Framework 的比较

何时使用 ADO.NET?

  • 需要手动控制 SQL 语句:如果你需要编写复杂的 SQL 查询或存储过程,ADO.NET 是一个不错的选择。
  • 性能要求高:ADO.NET 直接与数据库交互,性能通常比 ORM 框架更好。
  • 需要处理大量数据:ADO.NET 的 DataReader 是只读的,适合处理大量数据。

何时使用 Entity Framework?

  • 简化数据库操作:如果你希望通过 .NET 对象来操作数据库,减少 SQL 代码的编写,EF 是一个很好的选择。
  • 快速开发:EF 提供了许多内置功能,如迁移、延迟加载等,可以加速开发过程。
  • 跨数据库支持:EF 支持多种数据库,适合需要跨数据库平台的项目。

总结

本教程介绍了如何使用 ADO.NET 和 Entity Framework 进行数据库访问。ADO.NET 提供了直接与数据库交互的能力,适合需要手动控制 SQL 语句和性能要求高的场景。而 Entity Framework 则通过 ORM 的方式简化了数据库操作,适合快速开发和跨数据库平台的项目。

通过实践练习,你应该能够掌握这两种技术的基本用法,并能够在实际项目中灵活应用。

下一步

  • 深入学习:探索更多高级功能,如事务处理、并发控制、数据库迁移等。
  • 实践项目:尝试在实际项目中使用 ADO.NET 或 Entity Framework,解决实际问题。
  • 学习其他数据库技术:如 Dapper、NHibernate 等,扩展你的数据库访问技能。

希望本教程对你有所帮助,祝你在数据库访问的学习和实践中取得成功!